package com.xxzb.pack0819;

import java.io.File;

//File类
//Java文件类，以抽象的方式代表文件或目录
//有对文件或目录的创建，查找和删除的方法
public class DemoA {
    public static void a() {
        //文件或目录的创建、查找和删除方法
        //代表的是E盘下的yongpangaofeng目录中的a目录
        File file1 = new File("E:\\yongpangaofeng\\a");
        //第二种写法:
        File file2 = new File("E:\\yongpangaofeng", "a");
        //代表的E盘下yongpangaofeng目录中的b目录，在物理磁盘中并不存在
        File file3 = new File("E:\\yongpangaofeng\\b");
        //代表的是E盘下的yongpangaofeng目录中的a.txt文件
        File file4 = new File("E:\\yongpangaofeng\\a.txt");
        File file5 = new File("E:\\yongpangaofeng", "a.txt");
        //代表的是E盘下的yongpangaofeng目录下的c.txt文件，在物理磁盘中不存在
        File file6 = new File("E:\\yongpangaofeng\\c.txt");
        System.out.println(file1);
        System.out.println(file2);
        System.out.println(file3);
        System.out.println(file4);
        System.out.println(file5);
        System.out.println(file6);
    }

    //file类中文件常见的方法
    public static void b() throws Exception {
        File file = new File("E:\\yongpangaofeng\\b.txt");
//创建文件
//        file.createNewFile();
        //删除文件，不进入回收站，直接会粉碎掉，所以：删除需谨慎！！！
//        file.delete();
        //获取文件名
        String name = file.getName();
        //获取父目录名称
        String parentPath = file.getParent();
        //获取绝对路径
        String path = file.getAbsolutePath();
        System.out.println(name);
        System.out.println(parentPath);
        System.out.println(path);
    }

    //file类中文件夹(目录)的常见方法
    public static void c() {
        File file = new File("E:\\yongpangaofeng\\c\\m");
        //创建文件夹，如果父目录不存在即创建失败
        boolean b1 = file.mkdir();
        System.out.println("是否成功:" + b1);
        //创建文件夹，如果父目录不存在则先创建父目录再创建当前目录
//        boolean b2=file.mkdirs();
//        System.out.println("是否成功:"+b2);
        //获取父目录的路径
        String parentPath = file.getParent();
        //获取父目录
        File parent = file.getParentFile();
        System.out.println(parentPath);
        System.out.println(parent);
        //获取当前目录名字
        String name = file.getName();
        //获取当前目录路径
        String path = file.getAbsolutePath();
        //是否是文件
        boolean b3 = file.isFile();
        //是否是文件夹
        boolean b4 = file.isDirectory();
        //文件或目录是否存在
        boolean b5 = file.exists();
        System.out.println(name);
        System.out.println(path);
        System.out.println(b3);
        System.out.println(b4);
        System.out.println(b5);
    }

    //获取子目录或子文件
    public static void d() {
        File file = new File("E://yongpangaofeng");
        //获取到子目录或子文件
        //这个只获得名字
        String[] list1 = file.list();
        //这个正儿八经的是把目录拿到了
        File[] list2 = file.listFiles();
        for (File f : list2) {
            System.out.println(f.getName());
        }
    }

    //递归形式遍历指定目录：
    public static void e(String desc, int lev) {
        File file = new File(desc);
        // 控制缩进
        for (int i = 0; i < lev; i++) {
            System.out.print("\t");
        }
        System.out.println(file.getName());
        // 判断是否是目录，如果是目录才能获取到子文件
        boolean b = file.isDirectory();
        // 如果是目录获取到子内容(文件|目录)
        if (b) {
            File[] child = file.listFiles();
            for (File f : child) {
                e(f.getAbsolutePath(), lev + 1);
            }
        }
    }

    public static void f(String desc, int lev) {
        File file = new File(desc);
        for (int i = 0; i < lev; i++) {
            System.out.print("\t");
        }
        System.out.println(file.getName());
        boolean b = file.isDirectory();
        if (b) {
            File[] child = file.listFiles();
            for (File f : child) {
                f(f.getAbsolutePath(), lev + 1);
            }
        }
    }

    //遍历文件目录
    public static void g(String desc, int lev) {
        //根据路径获得目录：desc是路径，由方法调用时传入，lev是等级，根据lev区分是几级目录，达到缩进的效果
        File file = new File(desc);
        //控制缩进，就是每一级加\t
        for (int i = 0; i < lev; i++) {
            //每次lev＋1都缩进一个\t
            System.out.print("\t");
        }
        //获取到目录中文件的名字，输出出来
        System.out.println(file.getName());
        //判断是否是文件夹，因为是文件夹的时候才能够获取到子内容
        boolean b = file.isDirectory();
        if (b) {
            //如果是文件夹，首先获取到文件夹里面的子内容
            File[] child = file.listFiles();
            //遍历子内容
            for (File f : child) {
                //递归迭代，获取到字内容的路径，作为参数再次再方法中查找剩下的子内容，同时等级lev+1
                g(f.getAbsolutePath(), lev + 1);
            }
        }

    }

    public static void h(String desc, int lev) {
        File file = new File(desc);
        for (int i = 0; i < lev; i++) {
            System.out.print("\t");
        }
        System.out.println(file.getName());
        boolean b = file.isDirectory();
        if(b){
            File[] child=file.listFiles();
            for (File f:
                 child) {
                h(f.getAbsolutePath(),lev+1);
            }
        }
    }


    public static void main(String[] args) throws Exception {
//        a();
//        b();
//        c();
//        d();
        String root = "F:\\gaofeng2207";
        h(root, 0);
    }


}
